Add binary

Time: O(N); Space: O(1); easy

Given two binary strings, return their sum (also a binary string).

The input strings are both non-empty and contains only characters 1 or 0.

Example 1:

Input: a = “11”, b = “1”

Output: “100”

Example 2:

Input: a = “1010”, b = “1011”

Output: “10101”

Constraints:

  • Each string consists only of ‘0’ or ‘1’ characters.

  • 1 <= a.length, b.length <= 10^4

  • Each string is either “0” or doesn’t contain any leading zero.

[1]:
class Solution1(object):
    def addBinary(self, a, b):
        """
        :type a: string
        :type b: string
        :rtype: string
        """
        result, carry, val = "", 0, 0

        for i in range(max(len(a), len(b))):
            val = carry
            if i < len(a):
                val += int(a[-(i + 1)])
            if i < len(b):
                val += int(b[-(i + 1)])
            carry, val = val // 2, val % 2
            result += str(val)
        if carry:
            result += str(carry)

        return result[::-1]
[2]:
s = Solution1()

a = "11"
b = "1"
assert s.addBinary(a, b) == "100"

a = "1010"
b = "1011"
assert s.addBinary(a, b) == "10101"